#include "udp_client.h"

// udp不需要发送缓冲区，不需要对已发送的数据负责(超时重传)

udp_client::udp_client(std::string server_ip, int server_port)
{
	server.sin_family = AF_INET;
	server.sin_port = htons(server_port);
	server.sin_addr.s_addr = inet_addr(server_ip.c_str());
}

void udp_client::init_client()
{
	sock = socket(AF_INET, SOCK_DGRAM, 0);
	if(sock < 0) {	
		std::cerr << "socket create error" << std::endl;
		return;
	}
}

void udp_client::recv_data(std::string &out_string)
{
	char buff[BUFF_SIZE];

	struct sockaddr_in peer;
	socklen_t len = sizeof(peer);
	ssize_t s = recvfrom(sock, buff, BUFF_SIZE, 0, (struct sockaddr*)&peer, &len);
	
	// 收到数据
	if(s > 0) {
		buff[s] = 0;
		out_string = buff;
	} else {
	}

}

void udp_client::send_data(const std::string &in_string)
{
	// 通过传参对端信息来保证有目标发送
	// 要发送的数据是 char* 所以要用c_str;
	// 没有发送缓冲区
	sendto(sock, in_string.c_str(), in_string.size(), 0, (struct sockaddr*)&server, sizeof(server));
}

udp_client::~udp_client()
{
	close(sock);
}

